package com.eltsistemas.os.controller.veiculo;

import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.eltsistemas.adapter.Adapter;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.os.dao.pessoa.ClienteDao;
import com.eltsistemas.os.dao.veiculo.BuscaPorId;
import com.eltsistemas.os.dao.veiculo.BuscaVeiculo;
import com.eltsistemas.os.dao.veiculo.VeiculoDao;
import com.eltsistemas.os.modelo.pessoa.Cliente;
import com.eltsistemas.os.modelo.veiculo.Veiculo;

@Controller
@RequestMapping("/placa")
public class VeiculoController {
	
	
	@RequestMapping("/adiciona")
	public String adiciona(Veiculo veiculo, String data, String nomeCliente)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		VeiculoDao daoVeiculo = new VeiculoDao(session);
		
		try
		{
			Long idCliente = new BuscaPorId(session).getId(nomeCliente, "Cliente");
			
			Cliente c = new Cliente();
			c.setId(idCliente);
			
			veiculo.setCliente(c);
			
			daoVeiculo.adiciona(veiculo);
			session.close();
			return "redirect:lista";	
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
	}
	
	@RequestMapping("/lista")
	public String lista(Model model, boolean valor)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		VeiculoDao daoVeiculo = new VeiculoDao(session);
		ClienteDao daoCliente = new ClienteDao(session);
		
		model.addAttribute("veiculos", daoVeiculo.lista());
		model.addAttribute("clientes", daoCliente.lista());
				
		session.close();
		return "placa";
	}
	
	@RequestMapping("/alterado")
	public String alterado(Veiculo veiculo, String nomeCliente)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		VeiculoDao daoVeiculo = new VeiculoDao(session);
		
		try
		{
			Long idCliente = new BuscaPorId(session).getId(nomeCliente, "Cliente");
			
			Cliente c = new Cliente();
			c.setId(idCliente);
			
			veiculo.setCliente(c);
			
			daoVeiculo.altera(veiculo);
			session.close();
			return "redirect:lista";	
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
	}
	
	@RequestMapping("/remover")
	public String remover(Veiculo veiculo)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();

		VeiculoDao daoVeiculo = new VeiculoDao(session);
		try
		{
			daoVeiculo.remover( veiculo );
			session.close();
			return "redirect:lista";
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
	}

	@RequestMapping("/consulta")
	public String buscaVeiculoDoCliente(Model model, Cliente cliente)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		BuscaVeiculo buscaVeiculo = new BuscaVeiculo(session);
		buscaVeiculo.getVeiculo(cliente);
		
		model.addAttribute("veiculosDoCliente", buscaVeiculo.getVeiculo(cliente));
		
		return "redirect:lista";
	}

}
